package functionOptions

type Args struct{
	StringArg string
	IntArg int
}

var defaultArgs = Args{
	StringArg: "default string",
	IntArg: 666,
}

type Option2 func(p *Args)
func WithStringArg(s string) Option2{
	return func(p *Args) {
		p.StringArg=s
	}
}
func WithIniArg(s int) Option2{
	return func(p *Args) {
		p.IntArg=s
	}
}
func Method(opts ...Option2) Args{
	args := defaultArgs
	for _, opt := range opts {
		opt(&args)
	}
	return args
}


/*

//reference https://maolonglong.tech/post/golang/functional-options/
//因为 go 不支持参数默认值和可变参数
//所以 functional options 实现可变参数与默认值

fmt.Println(functionOptions.Method())
fmt.Println(functionOptions.Method(functionOptions.WithStringArg("hello")))
fmt.Println(functionOptions.Method(functionOptions.WithIniArg(19)))
*/